package itheima.C02_缓冲流BUffer;

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

/**
 * 拷贝出师表到另一个文件，恢复顺序
 * 需求：把《出师表》的文章顺序进行恢复到一个新文件中。
 * 分析：
 * ①定义一个缓存字符输入流管道与源文件接通。
 * ② 定义一个List集合存储读取的每行数据。
 * ③定义一个循环按照行读取数据，存入到List集合中去。
 * ④对List集合中的每行数据按照首字符编号升序排序。
 * ③ 定义一个缓存字符输出管道与目标文件接通。
 * ⑥ 遍历List集合中的每个元素，用缓冲输出管道写出并换行。
 */
public class Haiyan {
    public static void main(String[] args) throws IOException {

        //1.创建缓冲字符输入流对象，和指定的源文件建立输入流管道
        BufferedReader br = null;
        try {
            FileWriter fw = new FileWriter("H:\\javabase_ws2\\java_advance\\Day11_io\\src\\itheima\\C02_缓冲流BUffer\\haiyan.txt");
            BufferedWriter bw = new BufferedWriter(fw);
            br = new BufferedReader(new FileReader("C:\\Users\\Public\\Nwt\\cache\\recv\\单笑\\haiyan.txt"));
            InputStream is=new FileInputStream("C:\\Users\\Public\\Nwt\\cache\\recv\\单笑\\haiyan.txt");
            Reader reader =new  InputStreamReader(new FileInputStream("C:\\Users\\Public\\Nwt\\cache\\recv\\单笑\\haiyan.txt"));


        //2.使用输入流读取文本中的数据
       ArrayList<String> list = new ArrayList<>();
       String line;
       while ((line = br.readLine()) != null) {
           list.add(line);
       }
        list.forEach(System.out::println);
            //读取一行，存储到ArrayList
            //3.对读取到的数据集合进行排序
            Collections.sort(list, new Comparator<String>() {
                @Override
                public int compare(String o1, String o2) {
                    String[] split = o1.split("\\.");
                    String[] split1 = o2.split("\\.");
                    return Integer.valueOf(split[0])-Integer.parseInt(split1[0]);
                    //return o1.compareTo(o2);

                }
            });


        //4.创建缓冲字符输出流对象，和指定目标文件建立输出流管道
            for (String data : list) {
                bw.write(data);
                bw.newLine();
                bw.flush();
            }

        //5.使用输出流将排序后的数据写入到目标文件中

        //何一行，需要换行

        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}
